# 通过为参数设置默认值，使参数在调用时可省略
def greet(name, greeting="hello"):
    return f"f{greeting},{name}"

print(greet("Alice"))
print(greet("Bob",greeting="Hi"))
print("-" * 200)

# 错误语法，极其重要
def add_item(item,lst = []):
    lst.append(item)
    return lst

# 正确写法：用None替代
def add_item(item,lst = None):
    lst = [] if lst is None else lst
    lst.append(item)
    return lst

print(add_item("你好"))
print(add_item("张三"))


print("-" * 200)

# 最主要！！！     参数：参数类型，参数默认值，参数必须，可变参数，关键字参数。

def my_function(required_param: str = ...):
    if required_param is ...:
        raise ValueError("必填参数未提供！")
    print(f"接收到的参数: {required_param}")


my_function()


# 定义特殊的必填标记类
class Required:
    """表示必填参数的标记类"""

    def __repr__(self):
        return "Required(...)"

    def __str__(self):
        return "Required"


# 创建全局必填标记实例
REQUIRED = Required()


# 使用必填标记的函数
def create_user(
        username: str = REQUIRED,
        email: str = REQUIRED,
        is_admin: bool = False
):
    # 检查必填参数
    for param_name, param_value in locals().items():
        if param_value is REQUIRED:
            raise ValueError(f"参数 '{param_name}' 是必填项！")

    print(f"创建用户: {username}, 邮箱: {email}, 管理员: {is_admin}")